/**
 * 
 */
package ec.edu.uce.erp.ejb.persistence.dao.impl;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ec.edu.uce.erp.common.util.SeguridadesException;
import ec.edu.uce.erp.ejb.persistence.dao.ModuloDAO;
import ec.edu.uce.erp.ejb.persistence.entities.ModuloDTO;
import ec.edu.uce.erp.ejb.persistence.entities.UsuarioDTO;

/**
 * @author 
 *
 */
@Stateless
public class ModuloDAOImpl extends AbstractFacadeImpl<ModuloDTO> implements ModuloDAO{
	
	private static final Logger slf4jLogger = LoggerFactory.getLogger(ModuloDAOImpl.class);
	public ModuloDAOImpl(){}
	
	public ModuloDAOImpl(EntityManager entityManager) {
		super(entityManager);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ModuloDTO> obtenerModuloUsuario(UsuarioDTO usuarioDTO) throws SeguridadesException {
		
		slf4jLogger.info("obtenerModuloUsuario");
		
		List<ModuloDTO> modulosUsuario = null;
		
		try {
			
//			select m.* 
//			from segt_modulo_menu mm
//			left join segt_modulo m on mm.id_modulo=m.id_modulo
//			left join segt_menu me on me.id_menu=mm.id_menu
//			left join segt_perfil p on p.id_perfil=mm.id_perfil
//			where p.id_perfil = 1;
			
//			Query query = entityManager.createQuery("SELECT p FROM SegtModulo p JOIN p.segtRols e " +
//					"WHERE e.idRol = ? and p.estado = ? ORDER BY p.idModulo");
//			query.setParameter(1, segtUsuario.getSegtRol().getIdRol());
//			query.setParameter(2, estadoActivo);
			
			Query query = entityManager.createQuery("select distinct m from ModuloDTO m " +
					" join m.segtModuloMenus mm join mm.segtMenu me join mm.segtPerfil p where p.idPerfil = ?");
			query.setParameter(1, usuarioDTO.getSegtPerfil().getIdPerfil());
			
			modulosUsuario = query.getResultList();;
			
		} catch (Exception e) {
			throw new SeguridadesException(e);
		}
		
		return modulosUsuario;
	}
	

}
